﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Presentacion.Contrato.Propuestas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using System.Xml;
using AjaxControlToolkit;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Sistema_Totem.Presentacion.Presentador.Propuestas
{
    public class PresentadorConsultarPropuesta
    {
        #region Atributos

        private IContratoConsultarPropuesta _vista;
        private string _mensajeError = "La propuesta no pudo ser consultada";
        private string _mensajeNoExiste = "Este proyecto no posee una propuesta";

        #endregion Atributos

        #region Constructor
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="vista">El contrato que implementa</param>
        public PresentadorConsultarPropuesta(IContratoConsultarPropuesta vista)
        {
            _vista = vista;
        }

        #endregion Constructor

        #region Metodos
        /// <summary>
        /// Metodo que pinta la propuesta en el acordeon
        /// </summary>
        /// <param name="_xmlconsulta">Xml con el contenido de la propuesta</param>
        public void PintarPropuesta(XmlDocument _xmlconsulta)
        {
            Propuesta p = FabricaEntidad.NuevaPropuesta() as Propuesta;

            string ruta = "";
            p.ListaSeccion = p.Secciones(_xmlconsulta, ruta);
            int i = 0;
            int j = 0;
            foreach (Seccion seccion in p.ListaSeccion)
            {
                AccordionPane pane = new AccordionPane();
                pane.ID = seccion.Nombre;
                pane.HeaderContainer.Controls.Add(new LiteralControl(seccion.Nombre));
                foreach (ElementoControl control in seccion.ListaControl)
                {
                    Label elementovista = new Label();
                    elementovista.Text = control.Nombre + ": " + control.Contenido;
                    elementovista.ID = "Elemento " + j.ToString();
                    elementovista.CssClass = "labelpropuesta";
                    j++;
                    pane.ContentContainer.Controls.Add(elementovista);
                }
                _vista.acordeonConsultar.Panes.Add(pane);

            }
        }

        /// <summary>
        /// Metodo que valida si existe una propuesta para el proyecto o no
        /// </summary>
        /// <returns>True si tiene, False si no tiene</returns>
        public bool ValidarExistenciaPropuesta()
        {
            Proyecto _miProyecto = (Proyecto)_vista.Sesion["proyecto"];
            Comando<bool> _comando = FabricaComando.CrearComandoVerificarPropuesta(_miProyecto.IdProyecto);
            if (_comando.Ejecutar() == false)
            {
                _vista.acordeonConsultar.Visible = false;
                _vista.etiquetaMensajeInformativo.Text = _mensajeNoExiste;
                return false;
            }
            else
            {
                _vista.acordeonConsultar.Visible = true;
                _vista.etiquetaMensajeInformativo.Visible = false;
                Comando<Entidad> _comandoConsulta = FabricaComando.CrearComandoConsultarPropuesta(_miProyecto.IdProyecto);
                Propuesta _propuestaConsulta = _comandoConsulta.Ejecutar() as Propuesta;
                PintarPropuesta(_propuestaConsulta.Contenido);
                return true;

            }

        }

        #endregion Metodos
    }
}